package main

import (
	"fmt"
)

//如何解决主协程（主goroutine）在子协程结束后自动结束？

//var wg sync.WaitGroup
//WaithGroup提供了三个有用的函数
/*
Add
Done
Wait
*/
//Go语言的sync包提供了常见的并发编程控制锁;
//在并发编程中锁的主要作用是保证多个线程或者 goroutine在访问同一片内存时不会出现混乱

func main() {
	for i:=0;i<5;i++{
		wg.Add(1)//协程使用前开始计数
		go func(n int) {
			defer wg.Done() //使用defer机制，使得Done函数延迟执行，在运行完下面的println后开始Done
			//defer是golang的一个特色功能，被称为“延迟调用函数”。当外部函数返回后执行defer。
			fmt.Println(n)
		}(i)
	}
	wg.Wait()//在主协程里应该首先阻塞
}
